home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 15 / CU Amiga Magazine's Super CD-ROM 15 (1997)(EMAP Images)(GB)[!][issue 1997-10].iso / CUCD / Utilities / MathScript / MSExtras / QuickCode / QC / QuickCode.rexx < prev   
Encoding:
OS/2 REXX Batch file  |  1997-01-27  |  12.7 KB  |  476 lines

  1. /*
  2. QuickCode V1.5
  3.  
  4. A Mathscript ButtonBar, allowing rapid access to your 10 most
  5. used formula elements.
  6.  
  7. This is the ARexx layer for QuickCode.gc, and is designed
  8. to be run via this GUI script, NOT directly by the user!
  9.  
  10. Chris Coulson
  11.  
  12. 28.12.96
  13. 05.01.97
  14. 09.01.97 - Version 1.0
  15.            Code lookup from env:.qcprefs, and insertion into Mathscript.
  16.            But, we're getting spurious errors on the GETARG(), looks like
  17.            WAITPKT() is exiting when it shouldn't :-(  I've put in a
  18.            fix, but I'd rather WAITPKT() did it internally...
  19. 12.01.97 - Fixed "therefore" insertion problem.
  20. 13.01.97 - Version 1.1
  21.            Now tests for the presence of the Mathscript Rexx port before
  22.            sending any commands.  This allows the user to play with
  23.            QuickCode without needing Mathscript running, and more
  24.            importantly it also removes the error message you get if you
  25.            quit Mathscript before QuickCode
  26. 14.01.97 - Oops, a somewhat overenthusiastic bit of optimisation removed
  27.            the SELECT...END from the WHEN tree in SendMSCode().  Sorry
  28.            about that!
  29. 17.01.97 - Somehow I managed to miss the fact that the Clear button was no
  30.            longer working... fixed!
  31. 18.01.97 - Version 1.2
  32.            Added MxN matrix
  33. 21.01.97 - Version 1.3
  34.            Added new codes from Mathscript 3.1
  35. 25.01.97 - Version 1.4
  36.            Finally seen Simon's new bug for myself, and I think I've fixed it...
  37. 28.01.97 - Version 1.5
  38.            Let's try that again, shall we...  NOW I think I've fixed the bug :-)
  39. */
  40.  
  41. IF ~SHOW('L','rexxsupport.library') THEN
  42. DO
  43.     IF ~ADDLIB('rexxsupport.library',0,-30,0) THEN
  44.     DO
  45.         SAY 'REXXSupport.library not found!'
  46.         EXIT 10
  47.     
  48.     END
  49. END
  50.  
  51. port_ok = OPENPORT('quickcode')
  52. IF port_ok THEN
  53. DO
  54.     CALL GetCmd
  55.     DO FOREVER
  56.     
  57. /*
  58. OK, we'll accept that sometimes WAITPKT() exits even if there
  59. isn't a packet arrived.  In that case, we must check the
  60. return value, which will always reflect the truth regarding
  61. packet arrival.  Why WAITPKT() doesn't do this itself is just
  62. another of those computing mysteries...
  63. */
  64.  
  65.         isthereapacket = FALSE
  66.         DO UNTIL isthereapacket
  67.             isthereapacket = WAITPKT('quickcode')
  68.         END
  69.         packet = GETPKT('quickcode')
  70.         function = GETARG(packet)
  71.         function = UPPER(function)
  72.         REPLY(packet,0)
  73.         SELECT
  74.             WHEN function = 'EXIT' THEN LEAVE
  75.             WHEN function = 'PREFS' THEN CALL GetCmd
  76.             WHEN LEFT(function,1) = 'B' THEN
  77.             DO
  78.                 IF showlist('P','MATHSCRIPT.1') THEN
  79.                 DO
  80.                     SendMSCode()
  81.                  END
  82.              END
  83.         END
  84.     END
  85.     
  86. /*
  87.  
  88. Time to close up shop for the evening...
  89. */
  90.  
  91.     CLOSEPORT('quickcode')
  92. END
  93. EXIT
  94.  
  95.  
  96.  
  97. SendMSCode:
  98.     ADDRESS MATHSCRIPT.1
  99.     SELECT
  100.         WHEN function = 'B0' THEN 
  101.         DO
  102.             IF cmd0 ~= "blank" THEN "insertcode " cmd0
  103.         END
  104.         WHEN function = 'B1' THEN
  105.         DO
  106.             IF cmd1 ~= "blank" THEN "insertcode " cmd1
  107.         END
  108.         WHEN function = 'B2' THEN
  109.         DO
  110.             IF cmd2 ~= "blank" THEN "insertcode " cmd2
  111.         END
  112.         WHEN function = 'B3' THEN
  113.         DO
  114.             IF cmd3 ~= "blank" THEN "insertcode " cmd3
  115.         END
  116.         WHEN function = 'B4' THEN
  117.         DO
  118.             IF cmd4 ~= "blank" THEN "insertcode " cmd4
  119.         END
  120.         WHEN function = 'B5' THEN
  121.         DO
  122.             IF cmd5 ~= "blank" THEN "insertcode " cmd5
  123.         END
  124.         WHEN function = 'B6' THEN
  125.         DO
  126.             IF cmd6 ~= "blank" THEN "insertcode " cmd6
  127.         END
  128.         WHEN function = 'B7' THEN
  129.         DO
  130.             IF cmd7 ~= "blank" THEN "insertcode " cmd7
  131.         END
  132.         WHEN function = 'B8' THEN
  133.         DO
  134.             IF cmd8 ~= "blank" THEN "insertcode " cmd8
  135.         END
  136.         WHEN function = 'B9' THEN
  137.         DO
  138.             IF cmd9 ~= "blank" THEN "insertcode " cmd9
  139.         END
  140.         WHEN SUBWORD(function,1,1) = 'BX' THEN
  141.         DO
  142.             columns = SUBWORD(function,2,1)
  143.             rows = SUBWORD(function,3,1)
  144.             elements = columns * rows
  145.             cmd = "\mx"||rows||columns
  146.             DO loop=1 TO elements
  147.                 cmd = cmd||"[]"
  148.             END
  149.             "insertcode " cmd
  150.         END            
  151.         WHEN function = 'BCLR' THEN 
  152.         DO
  153.             clear
  154.         END
  155.     END
  156. RETURN 0
  157.  
  158.  
  159. GetCmd:
  160.  
  161. /*
  162. Although envvar should be present at all times, it seems that under certain
  163. circumstances it can't be opened, causing an error on the READLN() line.
  164. So we'll try opening it up to 10 times before giving up and returning a
  165. blank prefs string.
  166. */
  167.  
  168.     DO
  169.         envopen = OPEN("envvar","env:.qcprefs",READ)
  170.     UNTIL envopen
  171.     envstr = READLN("envvar")
  172.     CLOSE("envvar")
  173.     
  174.     cmd0 = LUCmd(WORD(envstr,1))
  175.     cmd1 = LUCmd(WORD(envstr,2))
  176.     cmd2 = LUCmd(WORD(envstr,3))
  177.     cmd3 = LUCmd(WORD(envstr,4))
  178.     cmd4 = LUCmd(WORD(envstr,5))
  179.     cmd5 = LUCmd(WORD(envstr,6))
  180.     cmd6 = LUCmd(WORD(envstr,7))
  181.     cmd7 = LUCmd(WORD(envstr,8))
  182.     cmd8 = LUCmd(WORD(envstr,9))
  183.     cmd9 = LUCmd(WORD(envstr,10))    
  184. RETURN 
  185.  
  186.  
  187. LUCmd: PROCEDURE
  188.     parse arg cmdstr
  189.     dirsep = POS('/',cmdstr)
  190.     IF dirsep = 0 THEN
  191.     DO
  192.         cmd = "blank"
  193.     END
  194.     ELSE
  195.     DO
  196.         bank = LEFT(cmdstr,dirsep-1)
  197.         cmdid = RIGHT(cmdstr,LENGTH(cmdstr)-dirsep)
  198.         SELECT
  199.             WHEN bank = '1' THEN cmd = LUBank1(cmdid)
  200.             WHEN bank = '2' THEN cmd = LUBank2(cmdid)
  201.             WHEN bank = '3' THEN cmd = LUBank3(cmdid)
  202.             WHEN bank = '4' THEN cmd = LUBank4(cmdid)
  203.             WHEN bank = '5' THEN cmd = LUBank5(cmdid)
  204.             WHEN bank = '6' THEN cmd = LUBank6(cmdid)
  205.             WHEN bank = '7' THEN cmd = LUBank7(cmdid)
  206.             WHEN bank = '8' THEN cmd = LUBank8(cmdid)
  207.             WHEN bank = '9' THEN cmd = LUBank9(cmdid)
  208.             WHEN bank = '10' THEN cmd = LUBank10(cmdid)
  209.             WHEN bank = '11' THEN cmd = LUBank11(cmdid)
  210.             WHEN bank = '12' THEN cmd = LUBank12(cmdid)
  211.             WHEN bank = '13' THEN cmd = LUBank13(cmdid)
  212.             WHEN bank = '14' THEN cmd = LUBank14(cmdid)
  213.         END
  214.     END    
  215. RETURN cmd
  216.  
  217.  
  218. LUBank1: PROCEDURE
  219.     parse arg cmdid
  220.     SELECT
  221.         WHEN cmdid = '1' THEN cmd = "\sy+"
  222.         WHEN cmdid = '2' THEN cmd = "\sy-"
  223.         WHEN cmdid = '3' THEN cmd = "\sy±"
  224.         WHEN cmdid = '4' THEN cmd = "\sy×"
  225.         WHEN cmdid = '5' THEN cmd = "\sy´"
  226.         WHEN cmdid = '6' THEN cmd = "\sy¸"
  227.         WHEN cmdid = '7' THEN cmd = "\syÄ"
  228.         WHEN cmdid = '8' THEN cmd = "\syÅ"
  229.         WHEN cmdid = '9' THEN cmd = "\sy·"
  230.     END
  231. RETURN cmd
  232.  
  233.  
  234. LUBank2: PROCEDURE
  235.     parse arg cmdid
  236.     SELECT    
  237.         WHEN cmdid = '1' THEN cmd = "\sy«"
  238.         WHEN cmdid = '2' THEN cmd = "\syÛ"
  239.         WHEN cmdid = '3' THEN cmd = "\sy¬"
  240.         WHEN cmdid = '4' THEN cmd = "\syÜ"
  241.         WHEN cmdid = '5' THEN cmd = "\sy­"
  242.         WHEN cmdid = '6' THEN cmd = "\syÝ"
  243.         WHEN cmdid = '7' THEN cmd = "\sy®"
  244.         WHEN cmdid = '8' THEN cmd = "\syÞ"
  245.         WHEN cmdid = '9' THEN cmd = "\sy¯"
  246.         WHEN cmdid = '10' THEN cmd = "\syß"
  247.     END
  248. RETURN cmd
  249.  
  250. LUBank3: PROCEDURE
  251.     parse arg cmdid
  252.     SELECT
  253.         WHEN cmdid = '1' THEN cmd = "\sy\"
  254.         WHEN cmdid = '2' THEN cmd = "\sy'"
  255.         WHEN cmdid = '3' THEN cmd = "\sy$"
  256.         WHEN cmdid = '4' THEN cmd = "\sy"""
  257.         WHEN cmdid = '5' THEN cmd = "\syÙ"
  258.         WHEN cmdid = '6' THEN cmd = "\syÚ"
  259.         WHEN cmdid = '7' THEN cmd = "\syØ"
  260.     END
  261. RETURN cmd
  262.  
  263. LUBank4: PROCEDURE
  264.     parse arg cmdid
  265.     SELECT
  266.         WHEN cmdid = '1' THEN cmd = "\l([]\r)"
  267.         WHEN cmdid = '2' THEN cmd = "\l([]"
  268.         WHEN cmdid = '3' THEN cmd = "[]\r)"
  269.         WHEN cmdid = '4' THEN cmd = "\l{[]\r}"
  270.         WHEN cmdid = '5' THEN cmd = "\l{[]"
  271.         WHEN cmdid = '6' THEN cmd = "[]\r}"
  272.         WHEN cmdid = '7' THEN cmd = "\l|[]\r|"
  273.         WHEN cmdid = '8' THEN cmd = "\l|[]"
  274.         WHEN cmdid = '9' THEN cmd = "[]\r|"
  275.         WHEN cmdid = '10' THEN cmd = "\l<[]\r>"
  276.         WHEN cmdid = '11' THEN cmd = "\l<[]"
  277.         WHEN cmdid = '12' THEN cmd = "[]\r>"
  278.         WHEN cmdid = '13' THEN cmd = "\l[[]\r]"
  279.         WHEN cmdid = '14' THEN cmd = "\l[[]"
  280.         WHEN cmdid = '15' THEN cmd = "[]\r]"
  281.         WHEN cmdid = '16' THEN cmd = "\l][]\r["
  282.         WHEN cmdid = '17' THEN cmd = "\l][]"
  283.         WHEN cmdid = '18' THEN cmd = "[]\r["
  284.         WHEN cmdid = '19' THEN cmd = "\l[[]\r["
  285.         WHEN cmdid = '20' THEN cmd = "\l][]\r]"
  286.     END
  287. RETURN cmd
  288.  
  289. LUBank5: PROCEDURE
  290.     parse arg cmdid
  291.     SELECT
  292.         WHEN cmdid = '1' THEN cmd = "\syÕ"
  293.         WHEN cmdid = '2' THEN cmd = "\syÕ\ud[][]"
  294.         WHEN cmdid = '3' THEN cmd = "\syå"
  295.         WHEN cmdid = '4' THEN cmd = "\syå\ud[][]"
  296.         WHEN cmdid = '5' THEN cmd = "\syò"
  297.         WHEN cmdid = '6' THEN cmd = "\syò\ud[][]"
  298.     END
  299. RETURN cmd
  300.  
  301. LUBank6: PROCEDURE
  302.     parse arg cmdid
  303.     SELECT
  304.         WHEN cmdid = '1' THEN cmd = "\gra"
  305.         WHEN cmdid = '2' THEN cmd = "\grb"
  306.         WHEN cmdid = '3' THEN cmd = "\grg"
  307.         WHEN cmdid = '4' THEN cmd = "\grd"
  308.         WHEN cmdid = '5' THEN cmd = "\gre"
  309.         WHEN cmdid = '6' THEN cmd = "\grz"
  310.         WHEN cmdid = '7' THEN cmd = "\grh"
  311.         WHEN cmdid = '8' THEN cmd = "\grq"
  312.         WHEN cmdid = '9' THEN cmd = "\grJ"
  313.         WHEN cmdid = '10' THEN cmd = "\gri"
  314.         WHEN cmdid = '11' THEN cmd = "\grk"
  315.         WHEN cmdid = '12' THEN cmd = "\grl"
  316.         WHEN cmdid = '13' THEN cmd = "\grm"
  317.         WHEN cmdid = '14' THEN cmd = "\grn"
  318.         WHEN cmdid = '15' THEN cmd = "\grx"
  319.         WHEN cmdid = '16' THEN cmd = "\gro"
  320.         WHEN cmdid = '17' THEN cmd = "\grp"
  321.         WHEN cmdid = '18' THEN cmd = "\grr"
  322.         WHEN cmdid = '19' THEN cmd = "\grs"
  323.         WHEN cmdid = '20' THEN cmd = "\grV"
  324.         WHEN cmdid = '21' THEN cmd = "\grt"
  325.         WHEN cmdid = '22' THEN cmd = "\gru"
  326.         WHEN cmdid = '23' THEN cmd = "\grf"
  327.         WHEN cmdid = '24' THEN cmd = "\grj"
  328.         WHEN cmdid = '25' THEN cmd = "\grc"
  329.         WHEN cmdid = '26' THEN cmd = "\gry"
  330.         WHEN cmdid = '27' THEN cmd = "\grw"
  331.         WHEN cmdid = '28' THEN cmd = "\grv"
  332.     END
  333. RETURN cmd
  334.  
  335. LUBank7: PROCEDURE
  336.     parse arg cmdid
  337.     SELECT
  338.         WHEN cmdid = '1' THEN cmd = "\grA"
  339.         WHEN cmdid = '2' THEN cmd = "\grB"
  340.         WHEN cmdid = '3' THEN cmd = "\grG"
  341.         WHEN cmdid = '4' THEN cmd = "\grD"
  342.         WHEN cmdid = '5' THEN cmd = "\grE"
  343.         WHEN cmdid = '6' THEN cmd = "\grZ"
  344.         WHEN cmdid = '7' THEN cmd = "\grH"
  345.         WHEN cmdid = '8' THEN cmd = "\grQ"
  346.         WHEN cmdid = '9' THEN cmd = "\grI"
  347.         WHEN cmdid = '10' THEN cmd = "\grK"
  348.         WHEN cmdid = '11' THEN cmd = "\grL"
  349.         WHEN cmdid = '12' THEN cmd = "\grM"
  350.         WHEN cmdid = '13' THEN cmd = "\grN"
  351.         WHEN cmdid = '14' THEN cmd = "\grX"
  352.         WHEN cmdid = '15' THEN cmd = "\grO"
  353.         WHEN cmdid = '16' THEN cmd = "\grP"
  354.         WHEN cmdid = '17' THEN cmd = "\grR"
  355.         WHEN cmdid = '18' THEN cmd = "\grS"
  356.         WHEN cmdid = '19' THEN cmd = "\grT"
  357.         WHEN cmdid = '20' THEN cmd = "\grU"
  358.         WHEN cmdid = '21' THEN cmd = "\grF"
  359.         WHEN cmdid = '22' THEN cmd = "\grC"
  360.         WHEN cmdid = '23' THEN cmd = "\grY"
  361.         WHEN cmdid = '24' THEN cmd = "\grW"
  362.     END
  363. RETURN cmd
  364.  
  365. LUBank8: PROCEDURE
  366.     parse arg cmdid
  367.     SELECT
  368.         WHEN cmdid = '1' THEN cmd = "\sy="
  369.         WHEN cmdid = '2' THEN cmd = "\sy»"
  370.         WHEN cmdid = '3' THEN cmd = "\sy¹"
  371.         WHEN cmdid = '4' THEN cmd = "\syº"
  372.         WHEN cmdid = '5' THEN cmd = "\sy@"
  373.         WHEN cmdid = '6' THEN cmd = "\syµ"
  374.         WHEN cmdid = '7' THEN cmd = "\sy<"
  375.         WHEN cmdid = '8' THEN cmd = "\sy£"
  376.         WHEN cmdid = '9' THEN cmd = "\sy>"
  377.         WHEN cmdid = '10' THEN cmd = "\sy³"
  378.     END
  379. RETURN cmd
  380.  
  381. LUBank9: PROCEDURE
  382.     parse arg cmdid
  383.     SELECT
  384.         WHEN cmdid = '1' THEN cmd = "\syÇ"
  385.         WHEN cmdid = '2' THEN cmd = "\syÈ"
  386.         WHEN cmdid = '3' THEN cmd = "\syÉ"
  387.         WHEN cmdid = '4' THEN cmd = "\syÊ"
  388.         WHEN cmdid = '5' THEN cmd = "\syÌ"
  389.         WHEN cmdid = '6' THEN cmd = "\syÍ"
  390.         WHEN cmdid = '7' THEN cmd = "\syÎ"
  391.         WHEN cmdid = '8' THEN cmd = "\syÏ"
  392.         WHEN cmdid = '9' THEN cmd = "\syË"
  393.         WHEN cmdid = '10' THEN cmd = "\syÆ"
  394.     END
  395. RETURN cmd
  396.  
  397. LUBank10: PROCEDURE
  398.     parse arg cmdid
  399.     SELECT
  400.         WHEN cmdid = '1' THEN cmd = "\sy¥"
  401.         WHEN cmdid = '2' THEN cmd = "\syÐ"
  402.         WHEN cmdid = '3' THEN cmd = "\sy¶"
  403.         WHEN cmdid = '4' THEN cmd = "\syÑ"
  404.         WHEN cmdid = '5' THEN cmd = "\syÁ"
  405.         WHEN cmdid = '6' THEN cmd = "\syÂ"
  406.         WHEN cmdid = '7' THEN cmd = "\syÀ"
  407.         WHEN cmdid = '8' THEN cmd = "\syÃ"
  408.         WHEN cmdid = '9' THEN cmd = "\syà"
  409.         WHEN cmdid = '10' THEN cmd = "\^"
  410.         WHEN cmdid = '11' THEN cmd = "\sy°"
  411.     END
  412. RETURN cmd
  413.  
  414. LUBank11: PROCEDURE
  415.     parse arg cmdid
  416.     SELECT
  417.         WHEN cmdid = '1' THEN cmd = "^[]"
  418.         WHEN cmdid = '2' THEN cmd = "_[]"
  419.         WHEN cmdid = '3' THEN cmd = "^_[][]"
  420.         WHEN cmdid = '4' THEN cmd = "[]\up[]"
  421.         WHEN cmdid = '5' THEN cmd = "[]\dn[]"
  422.         WHEN cmdid = '6' THEN cmd = "[]\ud[][]"
  423.     END
  424. RETURN cmd
  425.  
  426. LUBank12: PROCEDURE
  427.     parse arg cmdid
  428.     SELECT
  429.         WHEN cmdid = '1' THEN cmd = "\sqrt[]"
  430.         WHEN cmdid = '2' THEN cmd = "\rt[][]"
  431.         WHEN cmdid = '3' THEN cmd = "[]/[]"
  432.     END
  433. RETURN cmd
  434.  
  435. LUBank13: PROCEDURE
  436.     parse arg cmdid
  437.     SELECT
  438.         WHEN cmdid = '1' THEN cmd = "\rvec[]"
  439.         WHEN cmdid = '2' THEN cmd = "\lvec[]"
  440.         WHEN cmdid = '3' THEN cmd = "\bvec[]"
  441.         WHEN cmdid = '4' THEN cmd = "\ul[]"
  442.         WHEN cmdid = '5' THEN cmd = "\ol[]"
  443.         WHEN cmdid = '6' THEN cmd = "\not[]"
  444.         WHEN cmdid = '7' THEN cmd = "\aacute[]"
  445.         WHEN cmdid = '8' THEN cmd = "\agrave[]"
  446.         WHEN cmdid = '9' THEN cmd = "\ahat[]"
  447.         WHEN cmdid = '10' THEN cmd = "\acheck[]"
  448.         WHEN cmdid = '11' THEN cmd = "\abreve[]"
  449.         WHEN cmdid = '12' THEN cmd = "\atilde[]"
  450.         WHEN cmdid = '13' THEN cmd = "\dx1"
  451.         WHEN cmdid = '14' THEN cmd = "\dx2"
  452.         WHEN cmdid = '15' THEN cmd = "\dx3"
  453.         WHEN cmdid = '16' THEN cmd = "\dt1[]"
  454.         WHEN cmdid = '17' THEN cmd = "\dt2[]"    
  455.     END
  456. RETURN cmd
  457.  
  458. LUBank14: PROCEDURE
  459.     parse arg cmdid
  460.     SELECT
  461.         WHEN cmdid = '1' THEN cmd = "\mx21[][]"
  462.         WHEN cmdid = '2' THEN cmd = "\mx22[][][][]"
  463.         WHEN cmdid = '3' THEN cmd = "\mx23[][][][][][]"
  464.         WHEN cmdid = '4' THEN cmd = "\mx24[][][][][][][][]"
  465.         WHEN cmdid = '5' THEN cmd = "\mx31[][][]"
  466.         WHEN cmdid = '6' THEN cmd = "\mx32[][][][][][]"
  467.         WHEN cmdid = '7' THEN cmd = "\mx33[][][][][][][][][]"
  468.         WHEN cmdid = '8' THEN cmd = "\mx34[][][][][][][][][][][][]"
  469.         WHEN cmdid = '9' THEN cmd = "\mx41[][][][]"
  470.         WHEN cmdid = '10' THEN cmd = "\mx42[][][][][][][][]"
  471.         WHEN cmdid = '11' THEN cmd = "\mx43[][][][][][][][][][][][]"
  472.         WHEN cmdid = '12' THEN cmd = "\mx44[][][][][][][][][][][][][][][][]"
  473.         WHEN cmdid = '13' THEN cmd = ""
  474.     END
  475. RETURN cmd
  476.